﻿using MemoryPack;
using Newtonsoft.Json;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 基于WPF的电缆采样数据分析系统.Tools
{
    [MemoryPackable]
    public partial class TDRDataExcel
    {
        /// <summary>
        /// 加载波形数据
        /// </summary>
        /// <param name="path"></param>
        /// <returns></returns>
        public static List<float> LoadWav(string path)
        {
            // 文件路径是否存在该文件
            if(!File.Exists(path))
            {
                return null;
            }

            // 创建数据表格对象
            DataTable dtTable = new DataTable();
            // 用于存储波形数据的集合
            List<float> list = new List<float>();
            // 初始化表对象
            ISheet sheet;
            // 获取文件流
            using (var fs = new FileStream(path, FileMode.Open))
            {
                // 流的位置设置在开头
                fs.Position = 0;

                // 创建工作簿对象，并将文件流赋值
                XSSFWorkbook xSSFWorkbook = new XSSFWorkbook(fs);

                // 读取第一个工作表
                sheet = xSSFWorkbook.GetSheetAt(0);

                // 将所有行数据添加到数据表格和存储波形的集合中
                for (int i = sheet.FirstRowNum; i < sheet.LastRowNum; i++)
                {
                    IRow row = sheet.GetRow(i);
                    if (row == null) continue;

                    // 检测当前行中的所有单元格是否都是空白
                    if (row.Cells.All(d => d.CellType == CellType.Blank)) continue;

                    for (int j = row.FirstCellNum; j < row.LastCellNum; j++)
                    {
                        if (row.GetCell(j) != null)
                        {
                            if (!string.IsNullOrEmpty(row.GetCell(j).ToString()) && !string.IsNullOrWhiteSpace(row.GetCell(j).ToString()))
                            {
                                list.Add(float.Parse(row.GetCell(j).ToString()));
                            }
                        } 
                    }

                }

                fs.Close();
            }

            return list;
        }
    }
}
